package com.wj.console;

import java.util.List;

import com.wj.console.bean.welfareshop.param.CreateOrderParam;
import com.wj.console.bean.welfareshop.param.ProductQuery;
import com.wj.console.bean.welfareshop.param.SalesReturnOrNifferApplyParam;
import com.wj.console.bean.welfareshop.result.Address;
import com.wj.console.bean.welfareshop.result.AfterSaleDetail;
import com.wj.console.bean.welfareshop.result.Cate;
import com.wj.console.bean.welfareshop.result.CommodityStatus;
import com.wj.console.bean.welfareshop.result.CreateOrderResult;
import com.wj.console.bean.welfareshop.result.LogisticsMsg;
import com.wj.console.bean.welfareshop.result.OrderDetail;
import com.wj.console.bean.welfareshop.result.Price;
import com.wj.console.bean.welfareshop.result.ProductDetail;
import com.wj.console.bean.welfareshop.result.Remain;
import com.wj.console.bean.welfareshop.result.SalesReturnMsg;
import com.wj.console.bean.welfareshop.result.SalesReturnOrNifferApplyResult;
import com.wj.console.bean.welfareshop.result.Stock;
import com.wj.console.common.Page;
import com.wj.console.rpc.RpcResponse;

/**   
 * 类名称：IWelfareShopService
 * 类描述 ：福利商城服务接口
 * 创建人: wj  
 * 创建时间：2017-5-3 上午11:33:05  
 * 修改人：
 * 修改时间：
 * 修改备注：
 * 版本： V1.0
 */
public interface IWelfareShopService {
	/**
	 * 获取单个商品详情
	 * @param pid 商品ID
	 * @return RpcResponse data 商品详情
	 */
	RpcResponse<ProductDetail> getProductDetailForCache(String pid);
	
	/**
	 * 获取商品信息
	 * @param query
	 * @return
	 */
	RpcResponse<Page<ProductQuery, ProductDetail>> getProductsByPage(Page<ProductQuery, ProductDetail> query);
	
	/**
	 * 获取单个地址详情
	 * @return RpcResponse data 地址信息
	 * @param code 地址code
	 */
	RpcResponse<Address> getAddress(String code);
	
	/**
	 * 获取地址
	 * @return RpcResponse data 地址集合
	 * @param province 省
	 * @param city 市
	 * @param county 县/区
	 */
	RpcResponse<List<Address>> getAddress(String province,String city,String county);
	
	/**
	 * 获取单个分类详情
	 * @return RpcResponse data 地址信息
	 * @param code 地址code
	 */
	RpcResponse<Cate> getCate(String code);
	
	/**
	 * 获取商品分类
	 * @param rootCate 一级分类
	 * @param twoCate 二级分类
	 * @return RpcResponse data 商品分类
	 * 
	 */
	RpcResponse<List<Cate>> getCates(String rootCate,String twoCate);
	
	/**
	 * 根据分类获取分类详情列表
	 * @param cateList
	 * @return
	 */
	RpcResponse<List<Cate>> queryCates(List<String> cateList);

	/**
	 * 单个查询商品库存
	 * @param pid 商品ID
	 * @param num 数量
	 * @param address 配送地址ID,格式：1_0_0 (分别代表1、2、3级地址)
	 * @return RpcResponse data 商品库存
	 */
	RpcResponse<Stock> stock(String pid, String num, String address);

	/**
	 * 批量查询商品库存
	 * @param pidNums 商品ID_数量， 多个使用逗号(,)拼接即可. 例如: 20169_1, 23908_2, 20167_3
	 * @param address 配送地址ID,格式：1_0_0 (分别代表1、2、3级地址)
	 * @return RpcResponse data 多个商品库存
	 */
	RpcResponse<List<Stock>> stockBatch(String pidNums, String address);
	
	/**
	 * 查询商品可售状态
	 * @param pid 商品ID
	 * @return RpcResponse data 商品可售状态
	 */
	RpcResponse<CommodityStatus> saleStatus(String pid);

	/**
	 * 批量查询商品可售状态
	 * @param pids 商品ID,多个使用逗号(,)连接即可。例如: pid =20169,20178,23908
	 * @return RpcResponse data 多个商品可售状态
	 */
	RpcResponse<List<CommodityStatus>> batchSaleStatus(String pids);

	/**
	 * 查询商品协议价
	 * @param pid 商品ID
	 * @return RpcResponse data 商品协议价
	 */
	RpcResponse<Price> getPrice(String pid);

	/**
	 * 批量查询商品协议价
	 * @param pids 商品ID,多个使用逗号(,)连接即可。例如: pid =20169,20178,23908
	 * @return RpcResponse data 多个商品协议价
	 */
	RpcResponse<List<Price>> batchGetPrice(String pids);

	/**
	 * 提交订单
	 * @param createOrderParam 创建订单参数
	 * @return RpcResponse data 提交订单结果集
	 */
	RpcResponse<CreateOrderResult> submitOrder(CreateOrderParam createOrderParam);

	/**
	 * 查询订单详情
	 * @param orderKey 礼魔方系统订单号
	 * @return RpcResponse data 订单详情
	 */
	RpcResponse<OrderDetail> orderDetail(String orderKey);

	/**
	 * 订单反查询, 用于确认订单是否创建成功
	 * @param thirdOrder 我方生成系统订单号
	 * @return RpcResponse data 礼魔方订单号
	 */
	RpcResponse<String> orderSure(String thirdOrder);

	/**
	 * 订单物流信息接口-根据我方订单号获取
	 * @param thirdOrder 我方生成系统订单号
	 * @return RpcResponse data 订单物流信息
	 */
	RpcResponse<LogisticsMsg> orderTrack(String thirdOrder);

	/**
	 * 订单物流信息接口-根据礼魔方订单号获取
	 * @param orderKey 礼魔方系统订单号
	 * @return RpcResponse data 订单物流信息
	 */
	RpcResponse<LogisticsMsg> systemOrderTrack(String orderKey);
	
	/**
	 * 查询预存款余额
	 * @return RpcResponse data 预存款余额信息
	 */
	RpcResponse<Remain> remain();
	
	/**
	 * 获取商品退货地址信息
	 * @param pid 商品ID
	 * @return RpcResponse data 商品退货信息
	 */
	RpcResponse<SalesReturnMsg> getReturnAddress(String pid);

	/**
	 * 查询订单商品是否可以进行退换货操作
	 * @param orderKey 礼魔方系统订单号
	 * @param productIds 商品ID,如果有多个使用逗号(,)拼接, 例如: 232391,348273,58723
	 * @return RpcResponse data  商品是否可以进行退换货操作信息集合
	 */
	RpcResponse<List<CommodityStatus>> getStatus(String orderKey, String productIds);

	/**
	 * 申请退货
	 * @param SalesReturnOrNifferApplyParam 退货 参数
	 * @return RpcResponse data 申请退货返回结果信息
	 */
	RpcResponse<SalesReturnOrNifferApplyResult> salesReturn(SalesReturnOrNifferApplyParam salesReturnApplyParam);
	
	/**
	 * 申请换货
	 * @param SalesReturnOrNifferApplyParam 换货 参数
	 * @return RpcResponse data 申请换货返回结果信息
	 */
	RpcResponse<SalesReturnOrNifferApplyResult> salesNiffer(SalesReturnOrNifferApplyParam salesReturnApplyParam);
	
	/**
	 * 售后订单详情
	 * @param orderKey 礼魔方系统订单号
	 * @return RpcResponse data 售后订单详情
	 */
	RpcResponse<AfterSaleDetail> afterSaleDetail(String orderKey);
	
	
	/**
	 * 全局搜索商品
	 * @param key 商品关键字
	 * @return RpcResponse data 商品详情
	 */
	RpcResponse<Page<ProductQuery, ProductDetail>> queryEsSearchProductByPage(Page<ProductQuery, ProductDetail> page);
	
	/**
	 * 调用rpc按类型查询商品
	 * 按商品上架时间排序
	 * 按商品价格排序
	 * @return RpcResponse data 商品详情
	 */
	RpcResponse<Page<ProductQuery, ProductDetail>> queryEsSearchProductByPageSort(Page<ProductQuery, ProductDetail> page);
	
	
}
